<?php

class PuntoVentasController extends AppController {

    var $name = 'PuntoVentas';
    var $uses = array('ConexionMaestro', 'BiometricoParametros', 'Sistema', 'FormasPago', 'CierreCaja', 'Facturacion', 'Impresion', 'Usuario', 'Documento', 'Punto', 'Banco');
    var $helpers = array('Interfaz');
    var $components = array('Maestro');
    var $layout = "punto";

    public function beforeFilter() {
        $this->validar_sesion();
    }

    public function index() {
        $this->consultaCierre();
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objFac = $this->Maestro->modelo('punto', 'Facturacion', $tiendaSesion);
        $objRetTar = $this->Maestro->modelo('punto', 'RetencionTarjeta', $tiendaSesion);
        $objPunto = $this->Maestro->modelo('punto', 'Punto', $tiendaSesion);
        
        $dataBio = $this->ConexionMaestro->find('first', array('fields' => array('ConexionMaestro.host', 'ConexionMaestro.puerto', 'ConexionMaestro.base_datos', 'ConexionMaestro.usuario', 'ConexionMaestro.clave'), 'conditions' => array('ConexionMaestro.nombre' => 'BIOMETRICO')));
        $dataSistema = $this->Sistema->find('first', array('fields' => array('url', 'url_local'), 'conditions' => array('siglas' => 'PTOV')));
        $configBio = $this->BiometricoParametros->find('list', array('fields' => array('clave', 'valor')));
        $configBio['reporte'] = $dataSistema['Sistema']['url'];
        foreach($dataBio['ConexionMaestro'] as $indice => $valor) {
            $valor = (in_array($indice, array('host', 'clave'))) ? base64_encode($valor) : $valor;
                $configBio[$indice] = $valor;
        }
        $this->FormasPago->virtualFields['id'] = 'FormasPago.id || \'_\' || FormasPago.tipo || \'_\' || FormasPago.genera_ndc';
        $this->FormasPago->virtualFields['nombre'] = 'FormasPago.codigo || \' - \' || FormasPago.nombre';
        $listaFormasCobranza = $listaFormas = $this->FormasPago->find('list', array('fields' => array('id', 'nombre'), 'conditions' => array('FormasPago.estatus' => 1, 'FormasPago.tipo >' => 0), 'order' => 'FormasPago.codigo'));
        $listaBancosMaestro = $this->Banco->find('list', array('fields' => array('id', 'nombre'), 'conditions' => array('Banco.estatus' => 1), 'order' => 'Banco.nombre'));        
        $configPunto = $objPunto->find('first', array('fields' => array('Punto.tipo_config', 'Punto.permiso_cierre', 'Punto.fac_dir', 'Punto.capta_huella'), 'conditions' => array('Punto.id' => $this->Session->read('punto_id'))));
        $listaBancosPunto = $objRetTar->find('all', array('fields' => array('formadepago_id', 'banco_id'), 'conditions' => array('RetencionTarjeta.estatus' => 1), 'order' => 'RetencionTarjeta.formadepago_id', 'RetencionTarjeta.banco_id'));
        $listaTDD = $listaTDC = $listaTBP = array();
        foreach($listaBancosPunto as $indice => $valor){
            foreach($listaFormas as $indice2 => $valor2){
                $sepIndice = explode('_', $indice2);
                if($valor['RetencionTarjeta']['formadepago_id'] == $sepIndice[0]) {
                    switch ($sepIndice[1]){
                        case 4:
                            $listaTDD[$valor['RetencionTarjeta']['banco_id']] = $listaBancosMaestro[$valor['RetencionTarjeta']['banco_id']];
                        break;
                        case 5:
                            $listaTDC[$valor['RetencionTarjeta']['banco_id']] = $listaBancosMaestro[$valor['RetencionTarjeta']['banco_id']];
                        break;
                        case 6:
                            $listaTBP[$valor['RetencionTarjeta']['banco_id']] = $listaBancosMaestro[$valor['RetencionTarjeta']['banco_id']];
                        break;
                    }
                }
            }
        }

        $infoFacturacion = $objFac->find('first', array(
            'fields' => array('Facturacion.fecha', 'Facturacion.punto_id'),
            'conditions' => array('Facturacion.cierre_caja_id' => 0, 'CAST(Facturacion.fecha AS DATE) <' => date('Y-m-d')),
            'order' => array('Facturacion.id desc')
        ));
        $fecha_cierre = null;
        $pto_pendiente = null;
        $autorizado = 0;
        if (count($infoFacturacion) > 0) {
            
            $infoFacturacion2 = $objFac->find('first', array(
                'fields' => array('Facturacion.fecha', 'Facturacion.punto_id'),
                'conditions' => array('Facturacion.punto_id' => $this->Session->read('punto_id'), 'Facturacion.cierre_caja_id' => 0, 'CAST(Facturacion.fecha AS DATE) <' => date('Y-m-d')),
                'order' => array('Facturacion.id desc')
            ));
            if (count($infoFacturacion2) > 0) {
                $pto_pendiente = $infoFacturacion2['Facturacion']['punto_id'];
                $fecha_cierre = $infoFacturacion2['Facturacion']['fecha'];
                $autorizado = 1;
                //echo "es cierre para el punto conectado";
            } else {
                $pto_pendiente = $infoFacturacion['Facturacion']['punto_id'];
                $fecha_cierre = $infoFacturacion['Facturacion']['fecha'];
                ////OJO DEPENDE DEL PERMISO
                $objPunto = $this->Maestro->modelo('punto', 'Punto', $tiendaSesion);
                $autorizado = $configPunto['Punto']['permiso_cierre'];
            }
        }
        
        $listaTipoDoc = array();
        $arregloDocumentos = array('Cotizacions' => 'COTIZACIONES',
                                    'Facturacions' => 'FACTURAS',
                                    'Devolucions' => 'DEVOLUCIONES',
                                    'CartaOrdens' => 'CARTA ORDEN',
                                    'NotaCreditos' => 'NOTAS DE CREDITO',
                                    'NotaCreditoEspeciales' => 'NOTAS DE CREDITO ESP',
                                    'NotaDebitos' => 'NOTAS DE DEBITO'
                                    );

        $permisos = $this->Session->read('permiso_usuario');
        $this->Session->write('configPunto', $configPunto);
        foreach($arregloDocumentos as $indice => $valor){
            if(isset($permisos['DOCUMENTOS'][str_replace(' ', '', $valor)])){
                $listaTipoDoc[$indice] = $valor;
            }
        }
        
        $tiendasCierreCaja = $this->Maestro->lista_tiendas_caja();
        $tiendasDocumento = $this->Maestro->lista_tiendas_caja();
        array_unshift($tiendasDocumento, 'TODAS');
        
        $listaEstCot = array(0, 'TODO', 1 => 'PENDIENTE', 2 => 'FACTURADA', 3 => 'CADUCADA');
        $listaCantHuellas = array(1 => 1, 2 => 2, 3 => 3, 4 => 4);

        $this->set('listaFormas', $listaFormas);
        $this->set('listaFormasCobranza', $listaFormasCobranza);
        $this->set('listaTipoDoc', $listaTipoDoc);
        $this->set('listaBancosMaestro', $listaBancosMaestro);
        $this->set('listaTDD', $listaTDD);
        $this->set('listaTDC', $listaTDC);
        $this->set('tiendasCierreCaja', $tiendasDocumento);
        $this->set('tiendasDocumento', $tiendasDocumento);
        $this->set('listaTBP', $listaTBP);
        $this->set('autorizado', $autorizado);
        $this->set('fecha_cierre', $fecha_cierre);
        $this->set('pto_pendiente', $pto_pendiente);
        $this->set('listaEstCot', $listaEstCot);
        $this->set('listaCantHuellas', $listaCantHuellas);
        $this->set('configBiometrico', $configBio);
    }

    function consultaImpresion() {
        $this->layout = "ajax";
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objImpre = $this->Maestro->modelo('punto', 'Impresion', $tiendaSesion);
        $datosImpre = $objImpre->find('all', array('conditions' => array('Impresion.estatus' => 1), 'order' => array('Impresion.id')));

        for($i = 0; $i < count($datosImpre); $i++) {
            $usuId = $datosImpre[$i]['Impresion']['usuario_id'];
            $tipoDoc = $datosImpre[$i]['Impresion']['tipo_documento'];
            $puntoId = $datosImpre[$i]['Impresion']['punto_id'];

            $datosUsuario = $this->Usuario->find('first', array('fields' => array('Usuario.id', 'Usuario.usuario'), 'conditions' => array('Usuario.id' => $usuId)));
            $datosImpre[$i]['Usuario']['usuario'] = $datosUsuario['Usuario']['usuario'];
        }       

        $this->Set('datosImpre', $datosImpre);
    }

    function anularImpresion() {

        extract($this->request->data);

        $this->layout = "ajax";
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objImpre = $this->Maestro->modelo('punto', 'Impresion', $tiendaSesion);

        $datos['Impresion']['id'] = $idImpre;
        $datos['Impresion']['impresion'] = 4;
        $datos['Impresion']['pausa'] = 0;

        if($objImpre->save($datos)) {
            echo '1_' . 'BIEN';
        }
        else {
            echo '2_' . 'MAL';   
        }
        $this->autoRender = false;
    }

    function consultaCierre() {
        $creo_cierres = $this->Session->read('creo_cierres');
        if(empty($creo_cierres)){
            $tiendaSesion = $this->Session->read('tiendaBD');
            $objCierre = $this->Maestro->modelo('punto', 'CierreCaja', $tiendaSesion);
            $objPunto = $this->Maestro->modelo('punto', 'Punto', $tiendaSesion);
            $infoPunto = $objPunto->find('all', array(
                'fields' => array('Punto.id'),
                'conditions' => array('Punto.estatus' => 1),
                'order' => array('Punto.id desc')
            ));

            foreach ($infoPunto as $datos){
                $id=$datos['Punto']['id'];
                $total=$objCierre->find('count',array('conditions' => array('CierreCaja.punto_id' =>$id, 'CAST(CierreCaja.fecha AS DATE) =' => date('Y-m-d'))));
                $this->Session->write('punto_'.$id.'_cerrado',$total);
            }
            $this->Session->delete('creo_cierres');
            $this->Session->write('creo_cierres',1);
        }
        
    }

}
